home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / compuserve-file-archive / 05 Programming / CDT128.ARC / FIND.C < prev    next >
Text File  |  2019-04-13  |  3KB  |  91 lines

  1. /***********************************************************************/
  2. /***********************************************************************/
  3. /*                                                                     */
  4. /* ╘HIS PROGRAM IS COPYRIGHT 1986 BY ┴LAN ┘ORINKS.  ╔T MAY BE FREELY   */
  5. /* DISTRIBUTED FOR NON COMMERCIAL USAGE IF THIS COPYRIGHT NOTICE IS    */
  6. /* LEFT INTACT. ├OMMERCIAL USAGE OF THIS PROGRAM IS EXPLICITLY         */
  7. /* FORBIDDEN WITHOUT THE WRITTEN PERMISSION OF THE AUTHOR.             */
  8. /*                                                                     */
  9. /***********************************************************************/
  10. /***********************************************************************/
  11.  
  12.  
  13. /*     CDT VERSION 1.0    PART 12 OF 15   ╩ULY 25, 1986                 */
  14.  
  15.  
  16.  
  17. /* FIND - SEARCH FOR BYTE STRING IN GIVEN RANGE OF MEMEORY */
  18.  
  19.  
  20. #INCLUDE <STDIO.H>
  21. #INCLUDE "DBUG.H"
  22.  
  23.  
  24. #IFDEF ├╧╠80        /* DEFINE THE NUMBER OF ADDRESS FIELDS TO PRINT PER LINE */
  25.     #DEFINE ┴═┴╪ 16
  26. #ELSE
  27.     #DEFINE ┴═┴╪ 8
  28. #ENDIF
  29.  
  30.  
  31. #IFDEF ├64
  32.     /* BYTE IN MEMORY */
  33.  
  34.     #DEFINE ═┼═┬┘╘┼     (╨┼┼╦( ╙┴──╥(FND) ))
  35. #ELSE
  36.  
  37.     /* BYTE IN MEMORY */
  38.  
  39.     #DEFINE ═┼═┬┘╘┼     (PEEK( ┬┴╬╦(FND), ╙┴──╥(FND) ))
  40. #ENDIF
  41.  
  42. /* BYTE IN STRING INDEXED BY I */
  43.  
  44. #DEFINE ╙╘╥┬┘╘┼     *(╙╘╥╔╬╟(FND) + I)
  45.  
  46.  
  47.  
  48. VOID
  49. FIND()
  50. AUTO ╒╔╬╘   FADDR ;           /* ADDRESS OF STRING FOUND */
  51. AUTO INT    LEN,              /* LENGTH OF STRING TO SEARCH FOR */
  52.             COUNT = 0,        /* COUNT OF ADDRESSES OUTPUT PER LINE */
  53.             LNCNT = 0,        /* LINE COUNTER */
  54.             I = 0,            /* INDEX INTO STRING */
  55.             C ;
  56. EXTERN INT  PAGE ;
  57. EXTERN VOID PAGER() ;
  58.  
  59.     LEN = STRLEN( ╙╘╥╔╬╟(FND) ) ;
  60.  
  61.     WHILE( (╒╔╬╘)(╙┴──╥(FND)) < (╒╔╬╘)┼┴──╥(FND)  )
  62.     █
  63.         IF(  ═┼═┬┘╘┼ == ╙╘╥┬┘╘┼ )
  64.         █
  65.             IF( I++ == 0 )    /* IF FIRST CHAR OF STRING FOUND REMEMBER WHERE */
  66.                 FADDR = (╒╔╬╘)╙┴──╥(FND) ;
  67.             ╙┴──╥(FND)++ ;
  68.             IF( I == LEN )  /* ENTIRE STRING FOUND */
  69.             █
  70.                 I = 0 ;     /* GET READY TO LOOK FOR STRING AGAIN */
  71.                 PRINTF("%04X ",FADDR) ; /* OUTPUT ADDRESS */
  72.                 IF ( ++COUNT == ┴═┴╪ )    /* MAKE SURE ADDRESSES FIT ON LINE */
  73.                 █
  74.                     COUNT = 0 ;
  75.                     PRINTF("\N") ;
  76.                     /* TAKE CARE OF PAGEING IF NECESSARY */
  77.                     IF ( PAGE == ╘╥╒┼ )
  78.                         PAGER() ;
  79.                 ▌
  80.             ▌
  81.         ▌
  82.         ELSE IF( I == 0 )   /* HAVEN'T FOUND FIRST CHARACTER YET */
  83.             ╙┴──╥(FND)++ ;
  84.         ELSE
  85.             I = 0 ;        /* LOOK FOR FIRST CHAR AT CURRENT ADDRESS */
  86.     ▌
  87.     PRINTF("\N") ;
  88.     
  89.